package com.waitingresult.designpattern.creation.singleton.type6_double_ckeck;

public class SingletonDemo {
    public static void main(String[] args) {
        System.out.println("这种方式, 多线程是安全的");
        for (int i = 0; i < 100; i++) {
            new Thread(new SingletonThread()).start();
        }

    }
}

class SingletonThread implements Runnable {
    @Override
    public void run() {
        System.out.println(Singleton.getInstance());
    }
}

class Singleton {
    private static volatile Singleton instance;

    /**
     * 单例模式的第四种 实现方式
     * 来实现单例模式,  属于懒汉式模式
     * 优缺点:  优点, 属于懒加载
     * 缺点, 由于这个方法 会频繁执行, 给方法加同步 会导致 效率过低 不推荐使用
     */
    private Singleton() {
    }

    //添加 双重检查 synchronized 同步代码方法, 解决线程安全问题.
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}